<?php

namespace app\common\model;

use houdunwang\arr\Arr;
use think\Model;

class Rules extends Model
{
    // 数据表名称
    //**不论什么时候 加上表前缀**
    protected $table = 'authrule';
    // 数据表主键 复合主键使用数组定义 不设置则自动获取
    protected $pk = 'id';

    //获取规则树状数据
    public function getArrTreeData(){
        $data = db('authrule')->order('id','desc')->select();
        $newdata = Arr::tree($data,'title','id','pid');
        return $newdata;
    }
    public function add($data){
        //验证器验证
        $result = $this->validate(true)->save($data);
        if(false === $result){
            return ['valid'=>0,'msg'=>$this->getError()];
        }else{
            return ['valid'=>1,'msg'=>'添加成功'];
        }
    }

    //两步走   先找见自己的子规则的id集合  再把自己的id加上
    public function getRule($id){
        $ids = $this->getRuleSon(db('authrule')->select(),$id);
        //把自己追加到数组中
        $ids[] = $id;
        //除去自己和自己的子规则
        $ruleData = db('authrule')->whereNotIn('id',$ids)->select();
        //返回树状结构的规则列表
        $ruleData = Arr::tree($ruleData,'title','id','pid');
        return $ruleData;
    }
    public function getRuleSon($data,$id){
        //定义静态数组接收子规则id
        static $ids = [];
        foreach($data as $v){
            if( $v['pid'] == $id){
                //可能有多个子规则所以进行追加
                $ids[] = $v['id'];
                //可能子规则也有子规则  所以进行递归
                $this->getRuleSon($data,$v['id']);
            }
        }
        return $ids;
    }

    //编辑
    public function edit($data){
        $id = input('param.id');
        //验证器验证
        $result = $this->validate(true)->save($data,[$this->pk=>$id]);
        if(false === $result){
            return ['valid'=>0,'msg'=>$this->getError()];
        }else{
            return ['valid'=>1,'msg'=>'编辑成功'];
        }
    }

    //删除
    public function del($id){
        //找见自己的pid
        $pid = db('tauthrule')->where('id',$id)->value('pid');
        $data = db('authrule')->where('pid',$id)->select();
        if(!$data){
            $res = db('authrule')->delete($id);
            if($res){
                return ['valid'=>1,'msg'=>'删除成功'];
            }else{
                return ['valid'=>0,'msg'=>'删除失败'];
            }
        }
        if($data){
            return ['valid'=>0,'msg'=>'有子规则不能删除'];
        }
    }
}
